<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;">
<p style=" margin-top:18px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:xx-large; font-weight:600;">Формирование строки SQL-запроса в VBA</span> </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Опубликовано: 15 авг 03<br />Рейтинг: </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.addthis.com/bookmark.php?v=250&amp;username=xa-4cb75b821386eec8"><span style=" text-decoration: underline; color:#0000ff;">Добавить в закладки и поделиться</span></a> </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /><a href="http://www.sql.ru/faq/faq_topic.aspx?fid=157#add-comment"><span style=" text-decoration: underline; color:#0000ff;">Оценить и прокомменитировать</span></a><br /><a href="http://www.sql.ru/faq/faq_topic.aspx?fid=157#"><span style=" text-decoration: underline; color:#0000ff;">Распечатать статью</span></a><br /></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Автор: Sfagnum<br />Прислал: Sfagnum </p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Аксесс позволяет создавать программно строки SQL-запросов, а также строки, служащие значениями свойств форм, отчетов и т.д., параметров функций и т.д., которые тоже должны соответствовать синтаксису SQL. При этом надо помнить, что входящие в такую строку константы должны быть тоже оформлены по правилам SQL, а именно:<br /><br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">в числах десятичным разделителем должна быть точка,<br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">строки должны быть заключены в кавычки или апострофы (а кавычки или апострофы соответственно внутри строки удвоены),<br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">даты должны быть заключены в решетки и написаны по американскому формату (mm/dd/yyyy) с дробной чертой в качестве разделителя.<br /><br />Если это нарушить, то возможны следующие эффекты:<br /><br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">число вида 10,5 с запятой вместо точки будет воспринято как список из двух чисел 10 и 5, что приведет к какому-нибудь несоответствию в количестве полей,<br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">строка вида Vasya без кавычек и апострофов будет воспринята как имя поля, если такое поле есть, или как имя параметра, который тут же будет запрошен,<br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">дата вида 1/2/2010 или 1-2-2010 без решеток будет воспринята как арифметическое выражение (с делением и вычитанием соответственно),<br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">дата вида 1.2.2010 будет воспринята как дробное число с двумя десятичными точками и приведет к ошибке,<br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">дата с решетками, но не по американскому формату будет воспринята как дата, но другая (день и месяц будут переставлены).<br /><br />Ниже в каждом разделе приведен пример строки SQL, которая должна получиться при ее программном создании, а затем код VBA, который ее создает. <span style=" color:#ff0000;">Еще ниже дана очень полезная рекомендация.</span><br /><br /></p>
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; text-decoration: underline;">1. Использование чисел</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /><br /><span style=" font-weight:600;">SQL</span><br /><br /></p>
<pre style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; color:#0000ff;">SELECT</span><span style=" font-family:'Courier New,courier';"> *</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; color:#0000ff;">FROM</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Table</span></pre>
<pre style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; color:#0000ff;">WHERE</span><span style=" font-family:'Courier New,courier';"> (((</span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Table</span><span style=" font-family:'Courier New,courier';">.Quanty)=</span><span style=" font-family:'Courier New,courier'; font-weight:600; color:#00008b;">12</span><span style=" font-family:'Courier New,courier';">.</span><span style=" font-family:'Courier New,courier'; font-weight:600; color:#00008b;">197</span><span style=" font-family:'Courier New,courier';">));</span></pre>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /><span style=" font-weight:600;">VBA v1</span><br /><br /></p>
<pre style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Dim q </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">As</span><span style=" font-family:'Courier New,courier';"> Single</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">q = </span><span style=" font-family:'Courier New,courier'; font-weight:600; color:#00008b;">12</span><span style=" font-family:'Courier New,courier';">.</span><span style=" font-family:'Courier New,courier'; font-weight:600; color:#00008b;">197</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">strSQL = </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;SELECT * &quot;</span><span style=" font-family:'Courier New,courier';"> _</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">  &amp; </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;FROM Table &quot;</span><span style=" font-family:'Courier New,courier';"> _</span></pre>
<pre style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">  &amp; </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;WHERE (((Table.Quanty)=&quot;</span><span style=" font-family:'Courier New,courier';"> &amp; q &amp; </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;));&quot;</span></pre>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /><span style=" font-weight:600;">VBA v2</span><br /><br /></p>
<pre style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Dim q </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">As</span><span style=" font-family:'Courier New,courier';"> String</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">q = </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;12,197&quot;</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">strSQL = </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;SELECT * &quot;</span><span style=" font-family:'Courier New,courier';"> _</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">  &amp; </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;FROM Table &quot;</span><span style=" font-family:'Courier New,courier';"> _</span></pre>
<pre style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">  &amp; </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;WHERE (((Table.Quanty)=&quot;</span><span style=" font-family:'Courier New,courier';"> &amp; </span><span style=" font-family:'Courier New,courier'; color:#ff00ff;">Str</span><span style=" font-family:'Courier New,courier';">(q) &amp; </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;));&quot;</span></pre>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /><span style=" font-weight:600;">Примечание:</span><br /><br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">VBA v1</span> - для целых чисел. Для дробных чисел это частный случай, только когда системным разделителем является точка.<br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">VBA v2</span> - более правильный вариант, т.к. в классическом программировании допускается соединять только строки со строками, тогда как VBA v1 использует неявное преобразование типов, хотя нареканий на этот способ для целых чисел не было. (Пример приведён для случая, когда системным разделителем является запятая.)<br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Иногда также используют для преобразования функцию CStr(), но она не всегда применима, т.к. возвращает число в виде строки, где оно записывается через системный разделитель, тогда как SQL в качестве разделителя воспринимает только точку.<br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">NB!</span> При использовании нетипичных системных разделителей вышеприведённые примеры могут не работать, в этих случаях надо программно заменять системный разделитель на точку. Ниже приводится функция, возвращающая системный разделитель.<br /></p>
<pre style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; color:#0000ff;">Function</span><span style=" font-family:'Courier New,courier';"> GetDecimalSeparator() </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">As</span><span style=" font-family:'Courier New,courier';"> String</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">  GetDecimalSeparator = </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Format</span><span style=" font-family:'Courier New,courier';">(</span><span style=" font-family:'Courier New,courier'; font-weight:600; color:#00008b;">0</span><span style=" font-family:'Courier New,courier';">#, </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;.&quot;</span><span style=" font-family:'Courier New,courier';">)</span></pre>
<pre style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; color:#0000ff;">End</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Function</span></pre>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Также следует учесть, что в этом случае некоторые стандартные действия Access могут не работать.<br /><br /></p>
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; text-decoration: underline;">2. Использование строк</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /><br /><span style=" font-weight:600;">SQL</span><br /><br /></p>
<pre style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; color:#0000ff;">SELECT</span><span style=" font-family:'Courier New,courier';"> *</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; color:#0000ff;">FROM</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Table</span></pre>
<pre style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; color:#0000ff;">WHERE</span><span style=" font-family:'Courier New,courier';"> (((</span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Table</span><span style=" font-family:'Courier New,courier';">.Name)=</span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;All&quot;</span><span style=" font-family:'Courier New,courier';">));</span></pre>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /><span style=" font-weight:600;">VBA v1</span><br /><br /></p>
<pre style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Dim q </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">As</span><span style=" font-family:'Courier New,courier';"> String</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">q = </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;All&quot;</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">strSQL = </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;SELECT * &quot;</span><span style=" font-family:'Courier New,courier';"> _</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">  &amp; </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;FROM Table &quot;</span><span style=" font-family:'Courier New,courier';"> _</span></pre>
<pre style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">  &amp; </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;WHERE (((Table.Quanty)=&quot;&quot;&quot;</span><span style=" font-family:'Courier New,courier';"> &amp; DoubleQuote(q) &amp; </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;&quot;&quot;));&quot;</span></pre>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /><span style=" font-weight:600;">VBA v2</span><br /><br /></p>
<pre style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Dim q </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">As</span><span style=" font-family:'Courier New,courier';"> String</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">q = </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;All&quot;</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">strSQL = </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;SELECT * &quot;</span><span style=" font-family:'Courier New,courier';"> _</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">  &amp; </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;FROM Table &quot;</span><span style=" font-family:'Courier New,courier';"> _</span></pre>
<pre style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">  &amp; </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;WHERE (((Table.Quanty)='&quot; &amp; DoubleApostrophe(q) &amp; &quot;'));&quot;</span></pre>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /><span style=" font-weight:600;">Примечание:</span><br /><br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">VBA v1</span>: DoubleQuote() - функция, удваивающая <span style=" font-weight:600;">кавычки</span>.<br /><br />Пример:<br />условие выборки:<br /></p>
<pre style=" margin-top:1px; margin-bottom:1px; margin-left:1px; margin-right:1px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,monospace';">  a&quot;a's</span></pre>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">SQL:<br /></p>
<pre style=" margin-top:1px; margin-bottom:1px; margin-left:1px; margin-right:1px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,monospace';">  </span><span style=" font-family:'Courier New,monospace'; color:#0000ff;">WHERE</span><span style=" font-family:'Courier New,monospace';"> field=</span><span style=" font-family:'Courier New,monospace'; color:#008000;">&quot;</span><span style=" font-family:'Courier New,monospace'; font-weight:600; color:#008000;">a&quot;&quot;a's</span><span style=" font-family:'Courier New,monospace'; color:#008000;">&quot;</span></pre>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">VBA:<br /></p>
<pre style=" margin-top:1px; margin-bottom:1px; margin-left:1px; margin-right:1px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,monospace';">  strWhere = </span><span style=" font-family:'Courier New,monospace'; color:#008000;">&quot;</span><span style=" font-family:'Courier New,monospace'; font-weight:600; color:#0000ff;">WHERE</span><span style=" font-family:'Courier New,monospace'; font-weight:600; color:#008000;"> field=&quot;&quot;</span><span style=" font-family:'Courier New,monospace'; color:#008000;">&quot; &amp; &quot;</span><span style=" font-family:'Courier New,monospace'; font-weight:600; color:#008000;">a&quot;&quot;&quot;&quot;a's</span><span style=" font-family:'Courier New,monospace'; color:#008000;">&quot; &amp; &quot;</span><span style=" font-family:'Courier New,monospace'; font-weight:600; color:#008000;">&quot;&quot;</span><span style=" font-family:'Courier New,monospace'; color:#008000;">&quot;</span></pre>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">VBA v2:</span>: DoubleApostrophe() - функция, удваивающая <span style=" font-weight:600;">апострофы</span>.<br /><br />Пример:<br />условие выборки:<br /></p>
<pre style=" margin-top:1px; margin-bottom:1px; margin-left:1px; margin-right:1px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,monospace';">  a&quot;a's</span></pre>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">SQL:<br /></p>
<pre style=" margin-top:1px; margin-bottom:1px; margin-left:1px; margin-right:1px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,monospace';">  </span><span style=" font-family:'Courier New,monospace'; color:#0000ff;">WHERE</span><span style=" font-family:'Courier New,monospace';"> field=</span><span style=" font-family:'Courier New,monospace'; color:#008000;">'</span><span style=" font-family:'Courier New,monospace'; font-weight:600; color:#008000;">a&quot;a''s</span><span style=" font-family:'Courier New,monospace'; color:#008000;">'</span></pre>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">VBA:<br /></p>
<pre style=" margin-top:1px; margin-bottom:1px; margin-left:1px; margin-right:1px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,monospace';">  strWhere = </span><span style=" font-family:'Courier New,monospace'; color:#008000;">&quot;</span><span style=" font-family:'Courier New,monospace'; font-weight:600; color:#0000ff;">WHERE</span><span style=" font-family:'Courier New,monospace'; font-weight:600; color:#008000;"> field='</span><span style=" font-family:'Courier New,monospace'; color:#008000;">&quot; &amp; &quot;</span><span style=" font-family:'Courier New,monospace'; font-weight:600; color:#008000;">a&quot;&quot;a''s</span><span style=" font-family:'Courier New,monospace'; color:#008000;">&quot; &amp; &quot;</span><span style=" font-family:'Courier New,monospace'; font-weight:600; color:#008000;">'</span><span style=" font-family:'Courier New,monospace'; color:#008000;">&quot;</span></pre>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Упомянутые выше функции DoubleQuote и DoubleApostrophe - это НЕ встроенные функции Аксесса, а пользовательские функции, реализация которых оставляется на усмотрение программиста. В частности, в Аксессе версий 2000 и выше можно для этой цели использовать встроенную функцию Replace, а в 97 и ниже - вот такую функцию:<br /><br /></p>
<pre style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; color:#0000ff;">Public</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Function</span><span style=" font-family:'Courier New,courier';"> Replace97(StrMain </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">As</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">String</span><span style=" font-family:'Courier New,courier';">, StrFind </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">As</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">String</span><span style=" font-family:'Courier New,courier';">, StrZam </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">As</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">String</span><span style=" font-family:'Courier New,courier';">) </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">As</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">String</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; color:#0000ff;">On</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Error</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">GoTo</span><span style=" font-family:'Courier New,courier';"> err</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">    </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Dim</span><span style=" font-family:'Courier New,courier';"> pos </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">As</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Long</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">    </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">If</span><span style=" font-family:'Courier New,courier';"> StrFind = </span><span style=" font-family:'Courier New,courier'; color:#008080;">&quot;&quot;</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Then</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">GoTo</span><span style=" font-family:'Courier New,courier';"> err</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">    </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">If</span><span style=" font-family:'Courier New,courier';"> StrMain = </span><span style=" font-family:'Courier New,courier'; color:#008080;">&quot;&quot;</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Then</span><span style=" font-family:'Courier New,courier';"> Replace97 = StrZam: </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Exit</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Function</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">    </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Do</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Until</span><span style=" font-family:'Courier New,courier';"> InStr(</span><span style=" font-family:'Courier New,courier'; font-weight:600; color:#00008b;">1</span><span style=" font-family:'Courier New,courier';">, StrMain, StrFind) = </span><span style=" font-family:'Courier New,courier'; font-weight:600; color:#00008b;">0</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">        pos = InStr(</span><span style=" font-family:'Courier New,courier'; font-weight:600; color:#00008b;">1</span><span style=" font-family:'Courier New,courier';">, StrMain, StrFind)</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">        StrMain = </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">mid</span><span style=" font-family:'Courier New,courier';">(StrMain, </span><span style=" font-family:'Courier New,courier'; font-weight:600; color:#00008b;">1</span><span style=" font-family:'Courier New,courier';">, pos - </span><span style=" font-family:'Courier New,courier'; font-weight:600; color:#00008b;">1</span><span style=" font-family:'Courier New,courier';">) &amp; StrZam &amp; </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">mid</span><span style=" font-family:'Courier New,courier';">(StrMain, pos + Len(StrFind), Len(StrMain))</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">    </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Loop</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">    Replace97 = StrMain</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">    </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Exit</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Function</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">err:</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">    Replace97 = StrMain</span></pre>
<pre style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; color:#0000ff;">End</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Function</span></pre>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; text-decoration: underline;">3. Использование дат</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /><br /><span style=" font-weight:600;">SQL</span><br /><br /></p>
<pre style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; color:#0000ff;">SELECT</span><span style=" font-family:'Courier New,courier';"> *</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; color:#0000ff;">FROM</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Table</span></pre>
<pre style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; color:#0000ff;">WHERE</span><span style=" font-family:'Courier New,courier';"> (((</span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Table</span><span style=" font-family:'Courier New,courier';">.TimeOpen)=#</span><span style=" font-family:'Courier New,courier'; font-weight:600; color:#00008b;">3</span><span style=" font-family:'Courier New,courier';">/</span><span style=" font-family:'Courier New,courier'; font-weight:600; color:#00008b;">31</span><span style=" font-family:'Courier New,courier';">/</span><span style=" font-family:'Courier New,courier'; font-weight:600; color:#00008b;">2003</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; font-weight:600; color:#00008b;">11</span><span style=" font-family:'Courier New,courier';">:</span><span style=" font-family:'Courier New,courier'; font-weight:600; color:#00008b;">17</span><span style=" font-family:'Courier New,courier';">:</span><span style=" font-family:'Courier New,courier'; font-weight:600; color:#00008b;">19</span><span style=" font-family:'Courier New,courier';">#));</span></pre>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /><span style=" font-weight:600;">VBA</span><br /><br /></p>
<pre style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">Dim q </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">As</span><span style=" font-family:'Courier New,courier';"> </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Date</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">q = Now</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">strSQL = </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;SELECT * &quot;</span><span style=" font-family:'Courier New,courier';"> _</span></pre>
<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">  &amp; </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;FROM Table &quot;</span><span style=" font-family:'Courier New,courier';"> _</span></pre>
<pre style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">  &amp; </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;WHERE (((Table.TimeOpen)=#&quot;</span><span style=" font-family:'Courier New,courier';"> &amp; </span><span style=" font-family:'Courier New,courier'; color:#0000ff;">Format</span><span style=" font-family:'Courier New,courier';">(q, </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;mm\/dd\/yy hh\:mm\:ss&quot;</span><span style=" font-family:'Courier New,courier';">) &amp; </span><span style=" font-family:'Courier New,courier'; color:#ff0000;">&quot;#));&quot;</span></pre>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /><span style=" font-weight:600;">Примечание:</span><br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Microsoft JET SQL оперирует датами в американском формате, т.е. именно в вышеуказанном виде Месяц/День/Год.<br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Не пропустите символы <span style=" color:#ff0000;">#</span> (он обрамляет всю константу типа дата-время) и <span style=" color:#ff0000;">\</span> (он предохраняет <span style=" color:#ff0000;">/</span> и <span style=" color:#ff0000;">:</span> от их замены в соответствии с региональными настройками, что имеет обыкновение делать функция Format и что мешает правильной работе команды SQL).<br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Рекомендуется почитать здесь: <a href="http://www.sql.ru/faq/faq_topic.aspx?fid=103"><span style=" text-decoration: underline; color:#0000ff;">http://www.sql.ru/faq/faq_topic.aspx?fid=103</span></a> о способах хранения даты/времени.<br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">NB!</span> Не стоит пользоваться преобразованием даты в Integer (или Long), т.к. в Access'е и в SQL Server'е одной и той же дате соответствуют разные числа и при сравнении можно получить неожиданный результат.<br /><br /></p>
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; text-decoration: underline; color:#ff0000;">А теперь очень полезная рекомендация</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /><br />Составив такой стринг, содержащий команду SQL, и отправив его на выполнение, вы можете получить ошибку. В таком случае распечатайте этот стринг в отладочное окно и посмотрите на него глазами. Возможно, ошибка сразу бросится в глаза. Если не бросится, создайте новый запрос в конструкторе запросов, переключите в режим SQL, вставьте туда текст запроса и запустите на выполнение. Если ошибка есть, то она будет показана более явным образом.</p></body></html>